import { createApp } from 'vue'

import { setupStore } from './store' // 状态管理

import router, { setupRouter } from './router' // 路由

import { setupElementPlus } from './libs/element.part' // element-plus

import { setupGlobalCom } from '@/components' // 全局公用组件

import { setupDirectives } from './directives' // 自定义指令

import { setupErrorHandler } from './utils/error-log'

import Constants from './constants' // 常量

import '@/styles/reset.css'
import 'element-plus/lib/theme-chalk/index.css'
import './styles/element-variables.scss'
import '@/styles/index.scss' // global css

import App from './App.vue' // 入口组件

import './permission' // 权限控制

const app = createApp(App)

setupRouter(app) // 注册路由

setupStore(app) // 注册状态管理

setupElementPlus(app) // 注册ElementPlus组件

setupGlobalCom(app) // 注册全局公用组件

setupDirectives(app) // 注册全局自定义指令

setupErrorHandler(app)

// 全局变量
app.config.globalProperties.Constants = Constants

// eslint-disable-next-line
// app.config.errorHandler = (err, vm, info) => {
// handle error
// `info` 是 Vue 特定的错误信息，比如错误所在的生命周期钩子
// 这里能发现错误
// }

// 开启chrome浏览器vue调试工具
if (process.env.NODE_ENV === 'development') {
  // // ***调试工具显示后可以注释调这段代码，不然调试工具会多出一个vue实例
  // // ***这里__VUE_DEVTOOLS_GLOBAL_HOOK__.Vue赋值一个createApp实例
  // if ('__VUE_DEVTOOLS_GLOBAL_HOOK__' in window) {
  //   window.__VUE_DEVTOOLS_GLOBAL_HOOK__.Vue = app
  // }
  // app.config.devtools = true
}

// mock注册   vue.config.js 已经注册mock服务
// if (process.env.NODE_ENV === 'development') {
//   const { mockXHR } = require('../mock')
//   mockXHR()
// }

router.isReady().then(() => {
  app.mount('#app')
})

export default app
